<?php
	/**
	  * @package	MyTools
	  * @name		StylesWrapper
	  * @brief		Clase para generar hojas de estilo
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://opensource.org/licenses/gpl-2.0.php
	  * @date		2010-01-28
	  * @version	0.1.0
  	**/

	final class StylesWrapper extends MyDebuger implements MyVersions {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 1;
		/* numero de revision de la clase */
		private static $revision		= 0;

		/* hoja de estilos */
		private $styleSheet	= '<STYLE type=\'text/css\'>';

		public function __construct($debug = False) {
			/* creamos el padre */
			parent::__construct($debug, __CLASS__);
		}

		public function __destruct() {
			/* matamos el padre */
			parent::__destruct();
		}

		public static function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		public function addStyle($name) {
			/* mostramos un mensaje */
			$this->show('Agregando ' . $this->italic($name) . ' a la hoja de estilos..', False);
			/* agregamos el nombre del estilo */
			$this->addPart($name . '{');
			/* obtenemos los parametros */
			$args = func_get_args();
			/* recorremos los parametros */
			for ($i = 1; $i < count($args); $i++)
				/* agregamos el valor */
				$this->addPart(preg_replace('/\s+/', ' ', $args[$i]) . ';');
			/* finalizamos el estilo */
			$this->addPart('}');
			/* mostramos la cantidad de valores agregados */
			$this->show($this->bold($i - 1) . ' propiedades agregadas..', False);
			/* mostramos ok al mensaje */
			$this->showOK();
		}

		public function getStyleSheet($inTag = True) {
			/* mostramos un mensaje */
			$this->show('Retornando hoja de estilos..', False);
			/* obtenemos la hoja de estilos creada */
			$styleSheet = $this->styleSheet . '</STYLE>';
			/* vaciamos la hoja de estilos */
			$this->styleSheet = '<STYLE type=\'text/css\'>';
			/* mostramos ok al mensaje */
			$this->showOK();
			/* retornamos la hoja de estilos */
			return ($inTag === True ? $styleSheet : strip_tags($styleSheet));
		}

		private function addPart($part) {
			/* agregamos la parte a la hoja de estilos */
			$this->styleSheet .= $part;
		}

		private function catchExceptions($method = Null) {
			/* ingresamos a un control de errores para capturar mis excepciones */
			try {
				/* ingresamos a un control de errores para capturar las excepciones de ejecucion */
				try {
					/* realizamos algunas verificaciones */
					$this->verificarMetodo($method);
					/* obtenemos los parametros recibidos */
					$args = func_get_args();
					/* llamamos al metodo con los parametros */
					call_user_func_array(Array(__CLASS__, $method), $this->buildArgs($args));
				/* capturamos las excepciones */
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->newException($e);
				}
			/* capturamos mis excepciones */
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}
	}
?>